home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / cdsend / db_get_id.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  2KB  |  70 lines

  1. #include <string.h>
  2. #include <sys/types.h>
  3. #include <cdaudio.h>
  4.  
  5. #define    DB_ID_NTRACKS    5
  6. #define    DB_ID_MAXLEN    20
  7.  
  8. #define    DBID_MAP_SIZE    66
  9.  
  10. static char dbid_int_map[DBID_MAP_SIZE] = {
  11.   '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
  12.   'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
  13.   'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
  14.   'U', 'V', 'W', 'X', 'Y', 'Z', '@', '_', '=', '+',
  15.   'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 
  16.   'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 
  17.   'u', 'v', 'w', 'x', 'y', 'z',
  18. };
  19.  
  20. #define    DBID_MAP(b,val)    {\
  21.     register int v = (val);\
  22.     if (v>=DBID_MAP_SIZE) {\
  23.         sprintf(b, "%02d", v);\
  24.         b+= 2;\
  25.     }\
  26.     else *b++ = dbid_int_map[v];\
  27. }
  28.  
  29. const char *
  30. db_get_id( CDPLAYER *cdplayer, CDSTATUS *status )
  31. {
  32. char        db_rtrn_buf[1024];
  33. CDTRACKINFO    info;
  34. int        min, sec, i;
  35. char        *bufp = db_rtrn_buf, *tmp;
  36. int        nCDTracks, nIDTracks;
  37.  
  38.     if (status->state == CD_NODISC || status->state == CD_ERROR)
  39.     return (NULL);
  40.  
  41.     nCDTracks = status->last - status->first + 1;
  42.     DBID_MAP( bufp, ((nCDTracks>>4)&0xf) );
  43.     DBID_MAP( bufp, (nCDTracks&0xf) );
  44.  
  45.     if ( nCDTracks < DB_ID_NTRACKS )        nIDTracks = nCDTracks;
  46.     else if (nCDTracks == DB_ID_NTRACKS )    nIDTracks = DB_ID_NTRACKS;
  47.     else {
  48.     nIDTracks = DB_ID_NTRACKS - 1;
  49.     for (min= 0, sec= 0,i = status->first ; i <= status->last ; i++ ) {
  50.         CDgettrackinfo( cdplayer, i, &info );
  51.         min+= info.total_min;
  52.         sec+= info.total_sec;
  53.     }
  54.     min+= sec/60;
  55.     sec = sec % 60;
  56.     DBID_MAP( bufp, min );
  57.     DBID_MAP( bufp, sec );
  58.     }
  59.  
  60.     for (i = 0; i < nIDTracks; i++) {
  61.     if (status->first+i <= status->last) {
  62.         CDgettrackinfo( cdplayer, status->first+i, &info );
  63.         DBID_MAP( bufp, info.total_min );
  64.         DBID_MAP( bufp, info.total_sec );
  65.     }
  66.     }
  67.     *bufp++ = '\0';
  68.     return (strdup( db_rtrn_buf ));
  69. }
  70.